Cloudformationで作ったAWS Backup設定が作動せずエラーログも出なかったので調べた話
どーもsutoです。
以前投稿したブログでAWS Backup設定をCloudformation(CFn)で作ったのですが、これを利用してとある新規AWSアカウントで使用した結果、バックアップが動作しなかったためトラシューした内容を残しておきます。
結論としては”リソースの割り当てに付与するIAMロールが存在してなかった”という正直初歩的なことだったのですが、エラーログに現れない事象だったのでブログに書いておこうと思いました。
事象
CFnスタックでは”CREATE_COMPLETE”且つAWS Backupの各リソースも問題なく正常に作成されたのですが、なぜかバックアップジョブが動いていませんでした。
作成したテンプレートは自分のAWSアカウントで検証して正常に動いていたのですが、AWSアカウントを新規作成されたお客様の環境でバックアップジョブが開始されずCloudTrailにもログがまったく吐き出されていませんでした。
ジョブ関連のエラーがない上そもそもジョブの開始すらないのならば
- リソースの割り当て設定で対象リソースの該当がない(タグ付の値が間違っている)
- バックアッププランの設定内容に誤りがある(時刻設定など)
- リソースの割り当て設定にてアタッチしたIAMロールに何かしら問題がある
となる。上2つは自分のアカウントでは正常動作する理由が説明できないので、IAMロールに当たりをつけて一覧を覗いて見ると
あ〜存在しないRoleアタッチしていたらそりゃ動作しませんよね。それにしてもこのような場合CloudTrail側に権限に関するエラーが出たりするのかなと思っていましたが何もログは出ないんですね。またCFnのスタック実行時のイベントでもエラーでロールバックされないという。
自分のAWSアカウントでは検証などでいろいろやっていたので気づかなかったです。またAWS Backupのコンソール画面で手動作成した場合は出会うことのない事象ですね。(リソースの割り当てを設定する際にデフォルトIAMロールを自動で作ってくれますから)
解決策
あまりロールを作られていないまっさらなAWS環境で利用することも多いので、以下にIAMロールもまとめて新規作成するテンプレートに修正しました。
AWSTemplateFormatVersion: '2010-09-09' Description: AWS Backup Setting Parameters: MyBackupName: Description: Backup plan name Type: String Default: '' Cron: Description: type the cron. Type: String Default: cron(0 19 * * ? *) TagKey: Description: TagKey for backup Type: String Default: '' TagValue: Description: TagValue for backup Type: String Default: '' Resources: BackupVault: Type: "AWS::Backup::BackupVault" Properties: BackupVaultName: !Sub ${MyBackupName}-vault BackupPlan: Type: AWS::Backup::BackupPlan Properties: BackupPlan: BackupPlanName: !Ref MyBackupName BackupPlanRule: - RuleName: !Sub ${MyBackupName}-rule TargetBackupVault: !Ref BackupVault ScheduleExpression: !Ref Cron CompletionWindowMinutes: 720 StartWindowMinutes: 60 Lifecycle: DeleteAfterDays: 14 BackupSelection: Type: AWS::Backup::BackupSelection Properties: BackupPlanId: !Ref BackupPlan BackupSelection: SelectionName: !Ref MyBackupName IamRoleArn: !GetAtt BackupIAMrole.Arn ListOfTags: - ConditionType: "STRINGEQUALS" ConditionKey: !Ref TagKey ConditionValue: !Ref TagValue BackupIAMrole: Type: AWS::IAM::Role Properties: RoleName: AWSBackupDefaultServiceRole AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Action: sts:AssumeRole Principal: Service: backup.amazonaws.com ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup - arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores Path: "/service-role/"
まとめ
自作のAWS Backup設定を自動構築するCFnテンプレートのトラシューでした。存在しないIAMロールを指定してもスタック作成時にエラーは出ず、構築後のジョブが動かないにもかかわらずCloudTrailにもログが記録されなかったので小一時間ほど悩みました。
1つ1つ、作成リソースと関連リソースを調べて行った結果発見できたのでとりあえず謎のまま放置せずに済んで安心しました。今思えば正直くだらないミスですが、気付きにくそうなものだなと感じたためここに残しておこうと思います。